查看原文
其他

[译] Google 官方正解是否应该学习 Kotlin

hi-dhl ByteCode 2022-12-14
  • 原标题:Should I learn Kotlin for Android and other FAQs
  • 原地址:https://medium.com/androiddevelopers/should-i-learn-kotlin-for-android-and-other-faqs-88a2bb281a60
  • 原作者:Florina Muntenescu
  • 译者:hi-dhl

这篇文章来自 Google 开发技术推广工程师 Florina Muntenescu 分享的一篇文章,在这篇文章里精选了 Google 宣布支持 Kotlin 以来最热门的几个问题,回答了是否应该学习 Kotlin、以及如何学习 Kotlin。全文分为 译文译者思考 两个部分。

译文

自从我们在 2017 年宣布支持 Kotlin 以来,收到了很多关于 Kotlin 在 Android 上的问题:如何学习它 Kotlin,如何在 App 上使用 Kotlin,有什么好的 Kotlin 学习教程,以及 Google 内部是否在使用 Kotlin,和未来对 Java 语言的规划是什么,将通过这篇文章来回答这些问题。

Q: 是否应该学习 Kotlin ?

我们收到了很多类似的问题,总结如下:

  • 对于 Android 初学者,应该先学习 Java 还是 Kotlin?
  • 如果已经掌握了 Java 基础知识,现在应该切换到 Kotlin 开发 Android 吗?
  • 对于 Java 开发人员,如果想要学习 Android,建议先学习 Kotlin 还是 Java?

用一句简短的话,回答上面的问题:是的,开始学习和使用 Kotlin

下面会用很长的文字来分析,为什么应该学习和使用 Kotlin。

Kotlin & Android

2017年,我们在 Google I / O 上宣布支持 Kotlin,从那个时候我们已经开始准备关于 Kotlin 的 API、文档、案例,在 2019 年 Kotlin 成为 Android 的首选语言之后,我们开始更加依赖 Kotlin 的特性,例如,我们推荐使用协程执行异步任务。

Kotlin-first libraries

首先我们在 Jetpack(Room、LiveData、ViewModel 和 WorkManager) 中添加了协程的支持,从而改变了在 Android 上执行异步操作的方式,Firebase Android SDK 和大量的 Jetpack 库都用到了  Kotlin extension libraries (KTX)。

Kotlin extension libraries
https://developer.android.com/kotlin/ktx

现在很多库例如 Paging 3.0 和 DataStore 首先使用 Kotlin 开发的。 Jetpack Compose 是我们新的、未绑定的声明式 UI 工具包,它也是使用 Kotlin 开发的。

Jetpack Compose
https://developer.android.com/jetpack/compose

Tooling

开发的效率来源于强大的工具。因此,我们对 Kotlin 编译工具做了很多改进,包括对 Kotlin JVM 编译器、Kotlin 的 R8 优化,甚至开发了  Kotlin Symbol Processing。我们添加了 Android Kotlin Live 模板,会自动在 App 中添加一些通用模块,而且新的 Kotlin 的 Lint 检查工具可以帮助你检查 Kotlin 语言规范,当您将代码从 Java 转到 Kotlin 的时候,这个工具特别有用。

Kotlin Symbol Processing
https://github.com/google/ksp

Q: Google 内部是否在使用 Kotlin

在 Google 内部我们也在推荐使用 Kotlin,我们有超过 60 个应用(例如:Home、Drive、Maps 等等) 已经开始使用 Kotlin 开发了,到目前为止,在我们的代码库中有超过 200 万行 Kotlin 代码

Q: 是否应该将 App 迁移到 Kotlin?

我们收到了很多类似的问题,但是是否迁移到 Kotlin 取决于你,如果您对当前的代码库和技术栈感到满意,并且熟练地使用您的解决方案来管理异步任务,并且有一个有效的方法来捕获错误,迁移到 Kotlin 可能不是一个很好的方案。

如果你喜欢 Kotlin,而且想使用最新的 Jetpack API,那么你应该考虑将 Kotlin 加入到你的 App 中,Kotlin 优点之一是它与 Java 有很好的互操作性,您可以在项目中逐步使用它,可能首先在测试用例中使用 Kotlin,然后在新功能中使用 Kotlin,当熟悉之后,可以尝试将 Java 代码转为 Kotlin 代码。

如果想要迁移到 Kotlin , 可以查看我们的教程 Converting to Kotlin codelab

Q: 在 Android 中使用 Java 怎么样?

Kotlin 会编译成 Java 代码,它们是可以共存的,我们喜欢 Kotlin 因为使用它编写代码的更简洁、也更加安全,同时我们也会继续支持 Java 语言。例如,在 Android 11 中,我们增加了 OpenJDK 13 一系列 API 的支持,而 Android Studio 也允许你在所有 Android 设备上使用其中一些 API,无论操作系统版本是什么。

Q: 学习 Kotlin 的最好方法是什么?

切换到一种新的语言不是一件容易的事,但是我们也正努力使它变得更容易。

  • 点击 courses 开始学习 Kotlin,针对所有级别的开发者,从初级到高级所有课程,这些课程将帮助你提高在 Android 中使用 Kotlin,Android Basics in Kotlin 这是给没有经验的人提供的一个新的在线课程,还有一些高级课程教你如何使用协程。
  • 所有的文档都包含了 Kotlin 代码片段,可以非常方便的比较两种语言,而且所有示例都有 Kotlin 版本。
  • 你可以查看 文章视频 来学习如何使用 Kotlin。
  • 对于开发者或者团队想要切换到 Kotlin 我们提供一些指导,可以查看网页 developers.android.com/kotlin

courses
https://developer.android.com/kotlin/campaign/learn
Android Basics in Kotlin
https://developer.android.com/courses/android-basics-kotlin/course
视频
http://goo.gle/kotlin-videos


宣布支持 Kotlin 到现在已经三年了,我们一直在努力支持 Kotlin 和这个生态,与 JetBrains 一起为 Kotlin 建立了一个基础,以确保该语言能够很好的使用。不仅仅如此而已,在 Google 内部有一个团队专门研究 Kotlin 编译器,我们正在构建的 Jetpack API 不仅仅支持 Kotlin,但是会优先支持 Kotlin,我们也在努力让 Kotlin 在 Android 上的体验更好。

译者思考

自从 Google 宣布 Kotlin 成为 Android 开发的首选语言开始,Google 一直致力于让 Kotlin 变得更加的简单。

在 Kotlin 之初有个非常著名的库 Anko,Anko 是 JetBrains 开发的一个非常强大的库,它主要的目的是替代以前 XML 的方式,使用代码生成 UI 布局,并且封装了一系列工具,帮助开发者快速的使用 Kotlin,简化了 Kotlin 在 Android 上的使用,它有好几个扩展库:

  • Anko Commons:一个轻量级的库,包含了一些通用功能  intents、 dialogs、 logging 等等
  • Anko Layouts:替代以前 XML 的方式,使用代码生成 UI 布局
  • Anko SQLite:简化了 SQLite 的使用
  • Anko Coroutines:基于 kotlinx.coroutines 开发,简化了协程的使用

Anko 是非常成功的项目,它的出现让 Kotlin 在 Android 上的体验更好,但是遗憾的是 在 2019 年的时候这个库已经不在维护,不在维护,不在维护 ,因为自从 Google 宣布支持 Kotlin,让 Kotlin 成为 Android 开发的首选语言开始,Google 开发了很多库使得 Kotlin 在 Android 上体验更好,完全可以替代 Anko 的各个部分,所以 Anko 团队宣布不在维护了。

  • Android KTX:是 Kotlin 扩展库,封装了一系列工具,简化了 Kotlin 的使用
  • Jetpack Compose :替代以前 XML 的方式,用于构建原生 UI 的工具
  • Room:Google 提供的 ORM 框架,简化了 SQLite 的使用
  • Flow:flow 是对 Kotlin 协程的扩展,让我们可以像运行同步代码一样运行异步代码,简化了对协程的使用,而且功能非常强大

MAD Skills

不仅仅如此 Google 近期发布了 MAD Skills(Modern Android Development)新系列教程,旨在帮助开发者使用最新的技术,开发更好的应用程序,以视频和文章形式介绍 MAD 各个部分,包括 Kotlin、Android Studio、Jetpack、App Bundles 等等, Google 仅仅提供了视频和文章,我在这基础上,我做了一些扩展:

  • 视频上添加上了中英文字幕,帮助更好的学习新技术
  • 将会提供对应的实战案例,与视频一一对应
  • 除了实战案例,还会提供对应的源码分析

每隔几个星期 Google 会发布一系列教程,目前已经开始了一系列关于导航组件 (Navigation component) 的视频教程。

双语视频已经同步到 GitHub 仓库 MAD-Skills 可以先看视频部分,文章以及案例正在火速赶来,点击在线查看

仓库 MAD-Skills 地址
https://github.com/hi-dhl/MAD-Skills

在线查看地址
https://madskills.hi-dhl.com

除此之外,我还写了 Kotlin 和 Jetpack 系列文章,并且提供了对应的实战案例。

Kotlin 系列

Jetpack 系列



最后推荐我一直在更新维护的项目和网站:

  • 最新的 AndroidX Jetpack 相关组件的实战项目 以及 原理分析的文章
    https://github.com/hi-dhl/AndroidX-Jetpack-Practice

  • LeetCode / 剑指 offer / 国内外大厂面试题 / 多线程 题解,语言 Java 和 kotlin,包含多种解法、解题思路、时间复杂度、空间复杂度分析

    剑指 offer:https://offer.hi-dhl.com
    LeetCode:https://leetcode.hi-dhl.com

  • 最新 Android 10 源码分析系列文章
    https://github.com/hi-dhl/Android10-Source-Analysis

  • 一系列国外的技术文章,每篇文章都会有译者思考部分,对原文的更加深入的分析
    https://github.com/hi-dhl/Technical-Article-Translation

  • 「为互联网人而设计,国内国外名站导航」涵括新闻、体育、生活、娱乐、设计、产品、运营、前端开发、Android 开发等等网址
    https://site.51git.cn



致力于分享一系列最新技术原创文章

长按二维码即可关注


我知道你在看


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存